home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 1
/
Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso
/
FILES
/
DEV
/
C-H
/
CSerialD.cpt
/
serialdemo.c
Wrap
C/C++ Source or Header
|
1991-04-19
|
3KB
|
149 lines
#include <stdio.h>
#include <console.h>
#include <SerialDvr.h>
#define ECHO FALSE
#define OUTPUT_COOKED TRUE
#define SERBUFSIZ 1000
#define XONCHAR 0x11
#define XOFFCHAR 0x13
#define BACKSPACECHAR 0x08
#define ESCAPECHAR 0x1B
#define DELETECHAR 0x7f
void introduction (void);
OSErr serialinit(void);
void serialwrite(void);
int serialcharsavail(void);
void getserialchars(long );
void displaybuff(long );
void cleanup(void);
char interpret (char);
int ch;
char *inbuf,*sermgrbuf;
main()
{
OSErr err;
int count;
introduction();
csetmode(C_RAW,stdout);/* set up the console so it won't wait for input */
if ((err =serialinit())) {
printf("the serial initializations have failed id %d",err);
}
else
{
while (ch != ESCAPECHAR)
{
ch =getchar();
if (ch > 0)
{
if (OUTPUT_COOKED) ch = interpret(ch);
serialwrite();
if (ECHO) putchar(ch);
}
if (count = serialcharsavail())
{
getserialchars(count);
displaybuff(count);
}
}
}
cleanup();
}
void introduction()
{
printf(" this program reads and writes to them modem port at 2400 baud\n");
printf("it uses the 8bits 1 stop bit no parity\n");
printf("press <esc> key to exit\n");
}
OSErr serialinit()
{
OSErr err;
SerShk flags;
if ((err = RAMSDOpen(sPortA))) return err;
if ( (err = SerReset( AinRefNum,baud2400 + data8 + stop10 +noParity)))
{ RAMSDClose(sPortA);
return err;
}
/* give the serial manager a SERBUFSIZ buffer */
if (! (sermgrbuf = (char *)NewPtr (SERBUFSIZ))) {
err = SerSetBuf(AinRefNum, sermgrbuf, SERBUFSIZ);
}
if ( (err = SerReset( AoutRefNum,baud2400 + data8 + stop10 +noParity)))
{ RAMSDClose(sPortA);
return err;
}
/* set handshaking */
flags.fXOn = TRUE;
flags.fInX = TRUE;
flags.xOn = XONCHAR;
flags.xOff = XOFFCHAR;
if (( err = SerHShake(AinRefNum,&flags))){
RAMSDClose(sPortA);
return err;
}
if (!( inbuf = (char *) NewPtr(SERBUFSIZ))) return MemError();
return 0;
}
void serialwrite()
{
OSErr err;
char temp;
long num;
num = 1;
temp = ch;
err = FSWrite(AoutRefNum, &num, &temp);
}
int serialcharsavail()
{
long count;
SerGetBuf(AinRefNum,&count);
return count;
}
void getserialchars(long count)
{
OSErr err;
err = FSRead(AinRefNum,&count,inbuf);
}
void displaybuff(long count)
{
long i;
for (i=0; i < count; putchar(inbuf[i++]));
}
void cleanup()
{
RAMSDClose(sPortA);
if (inbuf) DisposPtr(inbuf);
}
char interpret(char ch)
{
switch (ch)
{
/* add your special cases here */
case BACKSPACECHAR:
return(DELETECHAR);
default:
return(ch);
}
}